Many operating systems support multiple concurrent threads of execution. In certain situations, threads must wait on particular events to occur before continuing their execution. However, operating systems generally limit the number of events that can be waited upon by the threads. Still further, the number of events posted to trigger a wait complete is limited to one or all events posted.
For example, operating systems provide native event abstractions, such as the CreateEvent( ) routine in Windows and condition variables in Unix. Each of these has a limitation both in the number of events that can be simultaneously waited on as well as a limitation that the events are waited on in an all or nothing fashion.